

/* eslint-disable */
const _data2Str = Object.prototype.toString



export default {
	// 检测是否外部资源
	isExternal(path) {
		return /^(https?:|mailto:|tel:)/.test(path)
	},

	// 检测是否URL
	validURL(url) {
		const reg =
			/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
		return reg.test(url)
	},

	// 检测是否字母
	validAlphabets(str) {
		const reg = /^[A-Za-z]+$/
		return reg.test(str)
	},

	// 检测是否小写字母
	validLowerCase(str) {
		const reg = /^[a-z]+$/
		return reg.test(str)
	},

	// 检测是否大写字母
	validUpperCase(str) {
		const reg = /^[A-Z]+$/
		return reg.test(str)
	},

	// 检测邮箱
	validEmail(email) {
		const reg =
			/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
		return reg.test(email)
	},

	// 检测手机号
	validPhoneNumber(phoneNumber) {
		return /^1[3456789]\d{9}$/.test(phoneNumber)
	},

	// 检测身份证号码
	validIdCard(value) {
		return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)
	},

	// 检测车牌号
	validCarNo(value) {
		// 新能源车牌
		const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
		// 旧车牌
		const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
		if (value.length === 7) {
			return creg.test(value);
		} else if (value.length === 8) {
			return xreg.test(value);
		} else {
			return false;
		}
	},

	// 验证一个值范围[min, max]
	validRange(value, param) {
		return value >= param[0] && value <= param[1]
	},

	// 验证一个长度范围[min, max]
	validRangeLength(value, param) {
		return value.length >= param[0] && value.length <= param[1]
	},

	// 检测类型
	isType(data, type) {
		return _data2Str.call(data).slice(8, -1) === type
	},

	isString(data) {
		return this.isType(data, 'String') || data instanceof String
	},

	isNumber(data) {
		return this.isType(data, 'Number')
	},

	isObj(data) {
		return this.isType(data, 'Object')
	},

	isNull(data) {
		return this.isType(data, 'Null')
	},

	isDate(data) {
		return this.isType(data, 'Date')
	},

	isArray(arg) {
		if (typeof Array.isArray === 'undefined') return this.isType(arg, 'Array')
		return Array.isArray(arg)
	},

	isBoolean(data) {
		return this.isType(data, 'Boolean')
	},

	isFunction(data) {
		return this.isType(data, 'Function')
	},

	isUndefined(data) {
		return this.isType(data, 'Undefined')
	},

	// 检测是否数字(包括数字字符串)
	isNumberIncludeNumberString(data) {
		if (this.isType(data, 'Number')) return true
		return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(data)
	},

	// 检测参数是否存在 不属于 undefined / null
	isExist(data) {
		return !this.isNull(data) && !this.isUndefined(data)
	},

	// 检测是否JSON
	isJson(value) {
		if (typeof value == 'string') {
			try {
				var obj = JSON.parse(value)
				if (typeof obj == 'object' && obj) {
					return true
				} else {
					return false
				}
			} catch (e) {
				return false
			}
		}
		return false
	},
}
